Fault Access

class FormattedText{
string plainText;
bool* caps; // plainText bool
public:
explicit FormattedText(const string& plainText): plainText(plainText){
caps=new bool[PlainText.length()];
}
~FormattedText(){
delete[] caps;
}
friend std::ostream& operator<<(std::ostream& os, const FormattedText& obj){
string s;
for(int i=0; i<obj.plainText.length(); ++i){
char c=obj.plainText[i];
s+=(obj.caps[i]? toupper(c): c);
}
return os<<s;
}
};
void capitalize(int start, int end){
for(int i=start; i<=end; ++i){
caps[i]=true;
}
}
//
FormattedText ft("This is a brave new world");
ft.capitalize(10, 15);
cout<<ft<<endl;
위의 코드는 flyweight 디자인 패턴을 적용하지 않음.
텍스트의 모든 문자마다 이진 플래그를 만들어서 사용하기 때문에, 메모리 사용에 비효율적임